package pers.xiaojun.boot.module.system.service.user;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import jakarta.validation.Valid;
import pers.xiaojun.boot.module.system.controller.user.vo.user.*;
import pers.xiaojun.boot.module.system.dao.entity.user.AdminUserDO;

import java.util.List;

/**
 * 描述
 *
 * @author xiaojun
 * @since 2025-10-04
 */
public interface UserService extends IService<AdminUserDO> {

    /**
     * 创建用户
     *
     * @param saveVO 用户信息
     * @return 用户编号
     */
    AdminUserDO saveUser(UserSaveReqVO saveVO);

    /**
     * 更新用户
     *
     * @param updateVO 更新的用户信息
     * @return 用户
     */
    AdminUserDO updateUser(UserSaveReqVO updateVO);

    /**
     * 导入用户数据
     *
     * @param userImports 用户导入数据列表
     * @param isOverwrite 是否覆盖旧数据
     * @return 导入结果
     */
    UserImportRespVO importUsers(List<UserImportExcelVO> userImports, Boolean isOverwrite);

    /**
     * 更新用户状态
     *
     * @param updateStatusVO 更新信息
     */
    void updateUserStatus(UserStatusUpdateReqVO updateStatusVO);


    /**
     * 更新用户密码
     *
     * @param updatePasswordVO 更新信息
     */
    void updateUserPassword(UserStatusPasswordReqVO updatePasswordVO);

    /**
     * 根据用户Id删除用户
     *
     * @param userId 用户Id
     */
    void deleteUserById(Long userId);

    /**
     * 根据用户Id删除一批用户
     *
     * @param userIds 用户id列表
     */
    void deleteUserByIds(List<Long> userIds);

    /**
     * 根据用户Id获取用户
     *
     * @param userId 用户Id
     * @return 用户
     */
    AdminUserDO getUserById(Long userId);

    /**
     * 根据用户名获取用户信息
     *
     * @param username 用户名
     * @return 用户信息
     */
    AdminUserDO getUserByUsername(String username);

    /**
     * 获取用户分页数据（条件查询）
     *
     * @param pageVO 分页查询条件
     * @return 分页数据
     */
    Page<AdminUserDO> listUsersPage(UserPageReqVO pageVO);


    /**
     * 校验用户是否存在
     *
     * @param userId 用户Id
     * @return 用户
     */
    AdminUserDO validateUserExists(Long userId);
}
